Powershell scripts/Get Security Assessments (Recommendations)/Get-SecSubAssessment.ps1 (48 lines of code) (raw):

<# .SYNOPSIS Will query resources for their own Security Subassessments .DESCRIPTION Will query resources for their own Security Subassessments .PARAMETER SubAssessmentLink Identifier for the subassessment .EXAMPLE Get-SecSubAssessment -SubAssessmentLink '/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/assessments/00000000-0000-0000-0000-000000000000/subAssessments' #> function Get-SecSubAssessment { [CmdletBinding()] param( [Parameter(Mandatory, ParameterSetName = 'SubAssessmentLink', ValueFromPipeline)] [ValidateNotNullOrEmpty()] [System.String[]] $SubAssessmentLink, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $ApiVersion = 'api-version=2020-01-01' ) begin { $output = [System.Collections.Generic.List[pscustomobject]]::new() } process { $token = (Get-AzAccessToken -ErrorAction Stop).Token $invokeRestMethodArgs = @{ Header = @{'Authorization' = "Bearer $token" } Method = 'GET' } $SubAssessmentLink.ForEach{ $subassessment = $_ $invokeRestMethodArgs.Uri = 'https://management.azure.com{0}?{1}' -f $subassessment, $ApiVersion try { $subassessments = (Invoke-RestMethod @invokeRestMethodArgs).value } catch { if (-not ($_.ErrorDetails.Message | ConvertFrom-Json).Error.Code -eq 'AssessmentNotFound') { throw $_ } } $subassessments.ForEach{ $null = $output.Add($_) } } } end { $output } }